package com.grm.demo.forkjoin;

import java.io.File;
import java.util.concurrent.ForkJoinPool;

public class ForkJoinDemo {

    public static void main(String[] args) {
//        long begin = System.currentTimeMillis();
//        findFileList(new File("D://projects//"));
//        long end = System.currentTimeMillis();
//        System.out.println("耗时："+(end-begin)+"ms");

        try {
            // 用一个 ForkJoinPool 实例调度总任务
            ForkJoinPool pool = new ForkJoinPool();
            QueryFile task = new QueryFile(new File("D://projects//"));

            long start = System.currentTimeMillis();

            pool.execute(task);//异步调用

            System.out.println("Task is Running......");
            Thread.sleep(1);
            int otherWork = 0;
            for (int i = 0; i < 100; i++) {
                otherWork = otherWork + i;
            }
            System.out.println("Main Thread done sth......,otherWork=" + otherWork);
            task.join();//阻塞的方法

            long end = System.currentTimeMillis();
            System.out.println("Task end,time=" + (end - start) + "ms");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取目录下的所有文件
     *
     * @param dir 目录
     * @return
     */
    public static void findFileList(File dir) {
        if (!dir.exists() || !dir.isDirectory()) {// 判断是否存在目录
            return;
        }
        File[] files = dir.listFiles();// 读取目录下的所有目录文件信息
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {// 如果文件
                    //遇到文件，检查
                    System.out.println("文件：" + file.getAbsolutePath());
                } else {// 如果是目录
                    findFileList(file);// 回调自身继续查询
                }
            }
        }
    }
}
